package org.me.java.jvm;

public class VarStorage {
    static class Test {
        // 静态变量 staticObj jdk8存储在堆中
        // 一个java.lang.Class类型的对象实例（new ObjectHolder()）引用了此变量，存储在堆中
        static ObjectHolder staticObj = new ObjectHolder();
        // 实例变量 由于new ObjectHolder()存储在堆中，instanceObj属于实例变量，所以instanceObj也存储在堆中
        ObjectHolder instanceObj = new ObjectHolder();

        void foo() {
            // 局部变量localObj则是存放在foo()方法栈帧（jvm栈中）的局部变量表中。  new ObjectHolder()存储在堆中
            ObjectHolder localObj = new ObjectHolder();
            System.out.println("done");
        }
    }

    private static class ObjectHolder {
    }

    public static void main(String[] args) {
        Test test = new VarStorage.Test();
        test.foo();
    }
}
